﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using HS.Business.Security;
using HS.Domain.EF;
using Newtonsoft.Json;
using HS.Presentation.Web.Extensions;
using HS.Presentation.Web.Models;
using System.Globalization;

namespace HS.Presentation.Web.Controllers
{
    public class PromocionController : Controller
    {
        [HttpGet]
        public ActionResult Search()
        {
            return View();
        }

        [HttpGet]
        public ActionResult Edit(int? id)
        {
            id = 1;
            PromocionBusiness obj = new PromocionBusiness();

            if (id == null)
            {
                ViewBag.State = 1;

                var codigo = (obj.GetMaxCodigo() + 1).ToString();

                return View(new Promocion()
                {
                    Codigo = codigo,
                    EsVigente = true,
                    RowStatus = true
                });
            }
            else
            {
                ViewBag.State = 2;

                return View(obj.GetEntityByPK(id, true));
            }
        }

        [HttpGet]
        public ActionResult Details(int id)
        {
            return View(new PromocionBusiness().GetEntityByPK(id, true));
        }

        [HttpPost]
        [ForceModelParse(typeof(PromocionVM))]
        public ActionResult Create(PromocionVM model)
        {
            PromocionBusiness objBusiness = new PromocionBusiness();
            Promocion obj = new Promocion()
            {
                IdPromocion = model.IdPromocion,
                Codigo = model.Codigo,
                Nombre = model.Nombre,
                Descripcion = model.Descripcion,
                FechaInicio = model.FechaInicio,
                HoraInicio = model.HoraInicio,
                FechaTermino = model.FechaTermino,
                HoraTermino = model.HoraTermino,
                IdEstadoGeneral = model.IdEstadoGeneral,
                EsVigente = model.EsVigente,
                Opciones = model.Opciones,
                Prioridad = model.Prioridad,
                EsAcumulable = model.EsAcumulable,
                IdCampania = model.IdCampania,
                RowStatus = model.RowStatus,
                Condiciones = model.Condiciones,
                Beneficios = model.Beneficios
            };

            objBusiness.Create(obj);

            return View("Index");
        }

        [HttpPost]
        [ForceModelParse(typeof(PromocionVM))]
        public ActionResult Edit(PromocionVM model, int promocionId)
        {
            PromocionBusiness objBusiness = new PromocionBusiness();
            Promocion obj = new Promocion()
            {
                IdPromocion = model.IdPromocion,
                Codigo = model.Codigo,
                Nombre = model.Nombre,
                Descripcion = model.Descripcion,
                FechaInicio = model.FechaInicio,
                HoraInicio = model.HoraInicio,
                FechaTermino = model.FechaTermino,
                HoraTermino = model.HoraTermino,
                IdEstadoGeneral = model.IdEstadoGeneral,
                EsVigente = model.EsVigente,
                Opciones = model.Opciones,
                Prioridad = model.Prioridad,
                EsAcumulable = model.EsAcumulable,
                IdCampania = model.IdCampania,
                RowStatus = model.RowStatus,
                Condiciones = model.Condiciones,
                Beneficios = model.Beneficios,
            };

            objBusiness.Edit(obj, promocionId);

            return View("Index");
        }

        [HttpPost]
        public ActionResult GetEntities(string codigo, string descripcion, int? estadoGeneral, string fechaInicio, string fechaTermino, bool? esVigente, bool? rowStatus)
        {
            var objResult = new PromocionBusiness()
                                .GetEntities(codigo, descripcion, estadoGeneral, fechaInicio, fechaTermino, esVigente, rowStatus);

            var model = JsonConvert.SerializeObject(objResult, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
            var modelResult = Json(JsonConvert.DeserializeObject(model, typeof(List<Promocion>)));

            return modelResult;
        }
    }
}
